package cn.dj.basic.controller;

import cn.dj.basic.util.AjaxResult;
import cn.dj.basic.util.FastDfsUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * Controller接口：店铺logo
 * 上传 -需要【请求方式：post】
 * 下载 - 不需要接口
 * 删除 - 需要【请求方式：delete】
 * 修改 - 不需要 = 先删除再上传
 */
@RestController//@Controller和@ResponseBody的复合注解
@RequestMapping("/fastDfs")//匹配请求
public class FastDfsController {
    /**
     * 文件上传的接口
     * @param file 与elementUi的上传组件中的name属性值一致
     * @return
     * post: http://localhost:8080/fastDfs
     */
    @PostMapping//匹配post请求
    //@RequestPart 获取复制数据-对复杂表单项进行处理，默认name值为file，故这里接收请求参数的形参名要与上传文件ElementUi里面的Upload组件中的name属性值一致（file）
    public AjaxResult uploadFile(@RequestPart MultipartFile file){//默认name为file，前端传的名字要与这里一致，所以用file
        try {
            String oName = file.getOriginalFilename();//xx.png - 文件原始名
            String exeName = oName.substring(oName.lastIndexOf(".") + 1);//png - 扩展名
            //调用工具类
            String fileName = FastDfsUtils.upload(file.getBytes(), exeName);//字节数组，扩展名
            //链式调用
            return  AjaxResult.me().setObj(fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false,"上传失败");
        }
        //  /group1/M00/03/8C/CgAIC2PeMsmAapr_AAEI7TefePg064.jpg
    }

    /**
     * 删除接口
     * @return
     * 前端发送请求先是delete请求：- 用这种 ?key=value
     *      delete http://localh:8080/fastDfs?path=group1/M00/03/8C/CgAIC2PeJp2APRVqAAH2I5Y672k395.jpg
     *
     * 后端接收：不能用@PathVariable("/{a}/{b}/{c}/{d}") - 麻烦，要一段段写很多。所以用上面那种方式获取请求路径中的参数
     *  delete http://localh:8080/fastDfs/group1/M00/03/8C/CgAIC2PeJp2APRVqAAH2I5Y672k395.jpg
     */
    @DeleteMapping//匹配delete请求
    public AjaxResult deleteFile(@RequestParam("path")String path){
        try {
            //path = /group1/M00/03/8C/CgAIC2PeJp2APRVqAAH2I5Y672k395.jpg
                //  substring(1)方法含头不含尾-从下标为1-g处开始往后截取，含头不含尾，没有说截取到哪里停止，则是截取到最后截取完
            path = path.substring(1);//group1/M00/03/8C/CgAIC2PeJp2APRVqAAH2I5Y672k395.jpg
            String groupName = path.substring(0,path.indexOf("/"));//0-g,截取到path.indexOf("/") - 第一个/的坐标停止。—— group1
            String fileName = path.substring(path.indexOf("/")+1);//第一个/的下一个字符开始截取到最后：M00/03/8C/CgAIC2PeJp2APRVqAAH2I5Y672k395.jpg
            FastDfsUtils.delete(groupName,fileName);//调用工具类，根据参数删除分布式文件管理系统上的图片文件
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false,"删除失败");
        }
    }
}
